// Copyright [2020] <unknown>
#include <bits/stdc++.h>
using namespace std;
// #define ONLINE_JUDGE
#ifndef ONLINE_JUDGE
#define dbg(x...) { cerr << "\033[32;1m" << #x << " -> "; err(x); }
void err() { cerr << "\033[39;0m" << endl; }
template<typename T, typename... A>
void err(T a, A... x) { cerr << a << ' '; err(x...); }
#else
#define dbg(...)
#endif

#define sz(x) ((int)x.size())

typedef long long LL;

const int N = 100000+50;


vector<int> G[N];

int n, m, t;

bool vis[N];
int off[N];
bool in[N];
// void dfs(int u) {
//     vis[u] = true;
//     in[u] = true;
//     for (int v : G[u]) {
//         dbg(u, v, vis[v], in[v]);
//         if (!vis[v])
//             dfs(v);
//         else if (!in[v])
//             off[v] = true;
//     }
//     in[u] = false;
// }

void dfs(int u, int r) {
    // dbg(u, r, off[u]);
    if (off[u] == r)
        return;
    if (vis[u] == 1)
        return;
    if (off[u] != -1 && off[u] != r) {
        vis[u] = 1;
        // return;
    }
    off[u] = r;
    for (int v : G[u]) {
        if (v == t)
            continue;
        // dbg(u, v, off[v], off[u], r);
        dfs(v, r);
    }
}

int main(int argc, char const *argv[]) {
    // code
    scanf("%d%d%d", &n, &m, &t);
    // ++t;
    vector<int> adj;
    for (int i=0; i<m; ++i) {
        int u, v;
        // ++u; ++v;
        scanf("%d%d", &u, &v);
        G[v].push_back(u);
        if (v == t)
            adj.push_back(u);
    }
    memset(off, -1, 4 * (n+1));
    for (int v : adj) {
        // dbg(v);
        dfs(v, v);
    }
    vector<int> ans;
    for (int v : adj) {
        if (!vis[v])
            ans.push_back(v);
    }
    printf("%d\n", sz(ans));
    sort(ans.begin(), ans.end());
    for (int x : ans)
        printf("%d\n", x);
    return 0;
}
